package cn.tsingmo.otproxy.security;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Base64;
import java.security.SecureRandom;

/**
 * 密钥管理器
 * 负责管理加密密钥和认证令牌
 */
public class KeyManager {
    private static final Logger logger = LoggerFactory.getLogger(KeyManager.class);
    // 加密密钥 (实际生产环境中应从安全配置或密钥管理服务获取)
    private static final String ENCRYPTION_KEY;
    // 认证令牌 (实际生产环境中应使用安全的随机令牌)
    private static final String AUTH_TOKEN;

    // 静态初始化块 - 生成或加载密钥
    static {
        try {
            // 生成256位AES密钥
            SecureRandom random = new SecureRandom();
            byte[] keyBytes = new byte[32]; // 256位 = 32字节
            random.nextBytes(keyBytes);
            ENCRYPTION_KEY = Base64.getEncoder().encodeToString(keyBytes);

            // 生成认证令牌
            byte[] tokenBytes = new byte[16];
            random.nextBytes(tokenBytes);
            AUTH_TOKEN = Base64.getEncoder().encodeToString(tokenBytes);

            logger.info("密钥和令牌初始化成功");
        } catch (Exception e) {
            logger.error("密钥初始化失败", e);
            throw new RuntimeException("密钥管理初始化失败");
        }
    }

    /**
     * 获取加密密钥
     */
    public static String getEncryptionKey() {
        return ENCRYPTION_KEY;
    }

    /**
     * 获取认证令牌
     */
    public static String getAuthToken() {
        return AUTH_TOKEN;
    }
}